]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
extensionSystem: Only load importers for enabled extensions
authorJasper St. Pierre <jstpierre@mecheye.net>
Fri, 14 Oct 2011 21:58:23 +0000 (17:58 -0400)
committerJasper St. Pierre <jstpierre@mecheye.net>
Thu, 20 Oct 2011 21:38:48 +0000 (17:38 -0400)
Rather than loading and enabling all extensions at Shell init time, save some
time and gain some basic security by not loading extensions if they're
not enabled.

https://bugzilla.gnome.org/show_bug.cgi?id=661815

js/ui/extensionSystem.js

index f31f2b48c3f9944ddd24b2e775389d99cf177883..c30da01cc8ecb0983c683e812bcee52c09451828 100644 (file)
@@ -62,6 +62,9 @@ const extensionMeta = {};
 const extensions = {};
 // Maps uuid -> extension state object (returned from init())
 const extensionStateObjs = {};
+// Maps uuid -> [GFile to the extension directory, Extension type]
+const extensionDirs = {};
+
 // Arrays of uuids
 var enabledExtensions;
 // GFile for user extensions
@@ -225,8 +228,13 @@ function disableExtension(uuid) {
 
 function enableExtension(uuid) {
     let meta = extensionMeta[uuid];
-    if (!meta)
+    if (!meta) {
+        if (extensionDirs[uuid]) {
+            let [dir, type] = extensionDirs[uuid];
+            loadExtension(dir, type);
+        }
         return;
+    }
 
     if (meta.state != ExtensionState.DISABLED)
         return;
@@ -254,7 +262,7 @@ function logExtensionError(uuid, message, state) {
                                                state: state });
 }
 
-function loadExtension(dir, enabled, type) {
+function loadExtension(dir, type) {
     let info;
     let uuid = dir.get_basename();
 
@@ -383,8 +391,7 @@ function loadExtension(dir, enabled, type) {
 
     meta.state = ExtensionState.DISABLED;
 
-    if (enabled)
-        enableExtension(uuid);
+    enableExtension(uuid);
 
     _signals.emit('extension-loaded', meta.uuid);
     _signals.emit('extension-state-changed', meta);
@@ -444,7 +451,9 @@ function _loadExtensionsIn(dir, type) {
         let name = info.get_name();
         let child = dir.get_child(name);
         let enabled = enabledExtensions.indexOf(name) != -1;
-        loadExtension(child, enabled, type);
+        extensionDirs[name] = [dir, type];
+        if (enabled)
+            loadExtension(child, type);
     }
     fileEnum.close(null);
 }